package feeinterface.protocol.utils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.ulwx.tool.ObjectUtils;

public class Constants {

	// 常量=============
	// 协议请求处理类的类路径
	public static String PROTOCOL_REQ_CLASSPATH = "feeinterface.protocol.reqn.T";
	public static String PROTOCOL_RES_CLASSPATH = "feeinterface.protocol.resn.M";
	// 协议处理类用到的常量
	public static String PROTOCOL_REQ_GATEWAY_KEY = "PRO_REQ_KEY";
	public static String PROTOCOL_REQ_GATEWAY_IP = "PRO_REQ_IP";
	public static String PROTOCOL_REQ_GATEWAY_IS_CMWAP = "PRO_REQ_IS_CMNET";
	public static String PROTOCOL_REQ_CARRIER = "PRO_REQ_CARRIER";
	public static String PROTOCOL_REQ_GATEWAY_PHONE = "PRO_REQ_PHONE_GATEWAY";
	public static String PROTOCOL_REQ_NEED_STAT_DOWN = "PRO_REQ_STAT_DOWN";
	public static String PROTOCOL_REQ_PROVINCE = "PROTOCOL_REQ_PROVINCE";
	public static String PROTOCOL_REQ_CITY = "PROTOCOL_REQ_CITY";

	//public static String DefaultIMSI = "1111111111";

	// 枚举=================
	/**
	 * 通道所属的大类别，对应与ChannelType表里的ChannelBigType字段,1：短彩类 2：WAP类 3：拨打类,
	 * 
	 * @author Administrator
	 * 
	 */
	public class ChannelBigType {
		/**
		 * 短彩类
		 */
		public static final int SMS = 1;
		/**
		 * WAp类
		 */
		public static final int WAP = 2;
		/**
		 * IVR拨打类
		 */
		public static final int IVR = 3;
		/**
		 * 为短信屏蔽内容
		 */
		public static final int SMSCLOSE = 400;
	}

	public class Channel {
		/**
		 * 用于测试通道编号
		 */
		public static final int ChannelIdForTest = 9999000;
	}

	public class Area {
		/**
		 * 中国地区码
		 */
		public static final int China = 37;
		public static final int UNKNOWN_PROVINCEID=630;
		public static final int UNKNOWN_CITYID=813;
	}

	/**
	 * 扣费状态
	 * 
	 * @author SCJ
	 * 
	 */
	public class FeeStatus {
		/**
		 * 注册用户失败
		 */
		public static final int RegistMobileError = 1;

		/**
		 * 客户端传的IMSI为空
		 */
		public static final int ImsiIsEmpty = 2;
		/**
		 * 用户在在北京
		 */
		public static final int IsBejin = 3;
		/**
		 * 用户用于绑定测试
		 */
		public static final int BindTest = 4;
		/**
		 * 用户在黑名单
		 */
		public static final int IsInBlackList = 5;
		/**
		 * 在我们自己的黑名单
		 */
		public static final int IsInMyBlackList = 6;
		/**
		 * 由于存在用户当天访问通道次数的限制，用户超过每天最大使用通道的次数
		 */
		public static final int OverMaxDayUseChannelCnt = 7;
		/**
		 * 由于存在用户当月使用通道次数的限制，用户超过每月使用通道的次数
		 */
		public static final int OverMaxMonthUseChannelCnt = 8;
		/**
		 * 由于存在用户当月使用通道天数的限制，用户超过每月使用通道的天数
		 */
		public static final int OverMaxMonthUseDayCnt = 9;
		/**
		 * 由于存在用户当天扣费额的限制，用户已经达到每天最大扣费额
		 */
		public static final int OverMaxDayFee = 10;
		/**
		 * 由于存在用户当月扣费额的限制，用户已经达到每月最大扣费额
		 */
		public static final int OverMonthDayFee = 11;
		/**
		 * 由于存在用户当天扣费额的限制，用户当天可扣扣费的余额不足
		 */
		public static final int InsufficientDayBalance = 12;
		/**
		 * 由于存在用户当月扣费额的限制，当月可扣扣费的余额不足
		 */
		public static final int InsufficientMonthBalance = 13;
		/**
		 * 当前业务合作在当前时段内被屏蔽
		 */
		public static final int ServiceCoColseInCurHour = 14;
		/**
		 * 当前合作中当前省份被屏蔽
		 */
		public static final int ServiceCoCloseInCurProvice = 15;
		/**
		 * 业务合作的当前包被屏蔽
		 */
		public static final int ServiceCoCloseInPacket = 16;
		/**
		 * 当前合作当前不可用
		 */
		public static final int ServiceCoDisabled = 17;
		/**
		 * 本次扣费大于当前合作的单次扣费额
		 */
		public static final int OverServiceCoSingleMaxFee = 18;
		/**
		 * 业务合作的CP找不到
		 */
		public static final int ServiceCpNotFount = 19;
		/**
		 * 应该在业务合作配置的用户最大请求间隔之外扣费，但却在之内所以不能扣费
		 */
		public static final int BetweenServiceCoUserFeeInterval = 20;
		/**
		 * 由于存在业务合作里单个用户的日扣费限制，此用户已经达到此业务当日最大限额
		 */
		public static final int OverServiceCoUserDayFeeMax = 21;
		/**
		 * 由于存在业务合作里单个用户的日扣费限制，此用户本次扣费的余额不足
		 */
		public static final int InsufficientServiceDayBalance = 22;
		/**
		 * 由于存在业务合作里单个用户的月扣费限制，此用户已经达到此业务当月最大限额
		 */
		public static final int OverServiceCoUserMonthFeeMax = 23;
		/**
		 * 由于存在业务合作里单个用户的月扣费限制，此用户本次扣费的余额不足
		 */
		public static final int InsufficientServiceMonthBalance = 24;
		/**
		 * 根据业务合作和业务级别无法找到通道
		 */
		public static final int FindeNoChannelByServiceClass = 25;
		/**
		 * 根据权重，省份，运营商，合作屏蔽，城市屏蔽，开通时段，通道日限月限无法找到通道
		 */
		public static final int FindeNoChannel = 26;
		/**
		 * 在过滤掉不行的通道后没有找到任何通道
		 */
		public static final int FindNoChannelAfterFilterCantUse = 27;
		/**
		 * 没有一元的通道给第三方
		 */
		public static final int FindNoChannelWithNoOneYuanChannelForThirdPart = 28;
		/**
		 * 根据通道费率,单次扣费最大次数,通道用户日限和月限，72小时只能使用一次的通道，最终没有找到通道
		 */
		public static final int FindNoChannelByFeeCodeAndSingleMaxCnt = 29;
		/**
		 * 没有找到可用类库
		 */
		public static final int FindNoLib = 30;
		/**
		 * 升级客户端LIB
		 */
		public static final int UpdateClientLibVer = 31;
		/**
		 * 让客户端发送获取手机号码指令
		 */
		public static final int LetClientSendGetPhone = 32;
		/**
		 * 客户端需要更新，但更新次数已经超限
		 */
		public static final int OverUpdateLibMaxCnt = 33;
		/**
		 * IMSI没有找到对应的手机号码，要客户端发送获取手机号码指令，但客户端发送获取手机号码指令次数超过日限
		 */
		public static final int OverDayGetPhoneMaxCnt = 34;
		/**
		 * IMSI没有找到对应的手机号码，要客户端发送获取手机号码指令，但客户端发送获取手机号码指令次数超过月限
		 */
		public static final int OverMonthGePhoneMaxCnt = 35;
		/**
		 * 除达到通道用户的最高日限额和月限额的通道,没有找到通道
		 */
		public static final int FindNoChannelRemoveDayMonthMaxFee = 36;
		/**
		 * 请求的扣费策略的第二位有错误
		 */
		public static final int FeePolicyBit2Error= 37;
		
		
		/**
		 * 除去仅使用一次的通道和请求包不支持的通道,没有找到通道
		 */
		public static final int FindeNoChannelRemoveOnlyOnce= 38;
		/**
		 * 通道省份屏蔽号段过滤，没有找到通道
		 */
		public static final int FindeNoChannelRemoveScreenPrex= 39;
		
		/**
		 * CanSupport的格式不对
		 */
		public static final int CanSupportFormatError= 40;
		
		/**
		 * 根据省份对业务合作级别进行屏蔽
		 */
		public static final int CloseInProvinceServiceClass=41;
		/**
		 * 超过用户当天请求的最大次数
		 */
		public static final int OverUserCurDayRequestCnt=42;
		/**
		 * 超过用户当月请求的天数
		 */
		public static final int OverUserCurMonthReqDayCnt=43;
		
		/**
		 * 没到下次访问日期
		 */
		public static final int NoAccessData=44;
		/**
		 * 成功返回
		 */
		public static final int SuccussReturnChannel = 100;
		/**
		 * 成功返回销量统计
		 */
		public static final int SuccussReturnGetPhone = 101;

		/**
		 * 未知错误
		 */
		public static final int UnknownError_1000 = 1000;
		/**
		 * 未知错误
		 */
		public static final int UnknownError_1001 = 1001;
		/**
		 * 未知错误
		 */
		public static final int UnknowError_1002 = 1002;
	}

	public static String getFeeStatus(int status) {
		String str = "未知错误";
		try {
			switch (status) {

			case FeeStatus.RegistMobileError:
				str = "注册用户失败";
				break;
			case FeeStatus.ImsiIsEmpty:
				str = "请求传递的IMSI为空";
				break;
			case FeeStatus.IsBejin:
				str = "用户在在北京";
				break;
			case FeeStatus.BindTest:
				str = "用户用于绑定测试";
				break;
			case FeeStatus.IsInBlackList:
				str = "用户在SP黑名单";
				break;
			case FeeStatus.IsInMyBlackList:
				str = "在我们自己的黑名单";
				break;
			case FeeStatus.OverMaxDayUseChannelCnt:
				str = "由于存在用户当天访问通道次数的限制，用户超过每天最大使用通道的次数";
				break;
			case FeeStatus.OverMaxMonthUseChannelCnt:
				str = "由于存在用户当月使用通道次数的限制，用户超过每月使用通道的次数";
				break;
			case FeeStatus.OverMaxMonthUseDayCnt:
				str = "由于存在用户当月使用通道天数的限制，用户超过每月使用通道的天数";
				break;
			case FeeStatus.OverMaxDayFee:
				str = "由于存在用户当天扣费额的限制，用户已经达到每天最大扣费额";
				break;
			case FeeStatus.OverMonthDayFee:
				str = "由于存在用户当月扣费额的限制，用户已经达到每月最大扣费额";
				break;
			case FeeStatus.InsufficientDayBalance:
				str = "由于存在用户当天扣费额的限制，用户当天可扣扣费的余额不足";
				break;
			case FeeStatus.InsufficientMonthBalance:
				str = "由于存在用户当月扣费额的限制，当月可扣扣费的余额不足";
				break;
			case FeeStatus.ServiceCoColseInCurHour:
				str = "当前业务合作在当前时段内被屏蔽";
				break;
			case FeeStatus.ServiceCoCloseInCurProvice:
				str = "当前合作中当前省份被屏蔽";
				break;
			case FeeStatus.ServiceCoCloseInPacket:
				str = "业务合作的当前包被屏蔽";
				break;
			case FeeStatus.ServiceCoDisabled:
				str = "当前合作当前不可用";
				break;
			case FeeStatus.OverServiceCoSingleMaxFee:
				str = "本次扣费大于当前合作的单次扣费额";
				break;
			case FeeStatus.ServiceCpNotFount:
				str = "业务合作的CP找不到";
				break;
			case FeeStatus.BetweenServiceCoUserFeeInterval:
				str = "应该在业务合作配置的用户最大请求间隔之外扣费，但却在之内所以不能扣费";
				break;
			case FeeStatus.OverServiceCoUserDayFeeMax:
				str = "由于存在业务合作里单个用户的日扣费限制，此用户已经达到此业务当日最大限额";
				break;
			case FeeStatus.InsufficientServiceDayBalance:
				str = "由于存在业务合作里单个用户的日扣费限制，此用户本次扣费的余额不足";
				break;
			case FeeStatus.OverServiceCoUserMonthFeeMax:
				str = "由于存在业务合作里单个用户的月扣费限制，此用户已经达到此业务当月最大限额";
				break;
			case FeeStatus.InsufficientServiceMonthBalance:
				str = "由于存在业务合作里单个用户的月扣费限制，此用户本次扣费的余额不足";
				break;
			case FeeStatus.FindeNoChannelByServiceClass:
				str = "根据业务合作和业务级别无法找到通道";
				break;
			case FeeStatus.FindeNoChannel:
				str = "根据权重，省份，运营商，合作屏蔽，城市屏蔽，开通时段，通道日限月限无法找到通道";
				break;
			case FeeStatus.FindNoChannelAfterFilterCantUse:
				str = "在过滤掉不行的通道后没有找到任何通道";
				break;
			case FeeStatus.FindNoChannelWithNoOneYuanChannelForThirdPart:
				str = "没有一元的通道给第三方";
				break;
			case FeeStatus.FindNoChannelByFeeCodeAndSingleMaxCnt:
				str = "根据通道费率,单次扣费最大次数,通道用户日限和月限，72小时只能使用一次的通道，最终没有找到通道";
				break;
			case FeeStatus.FindNoLib:
				str = " 没有找到可用类库";
				break;
			case FeeStatus.UpdateClientLibVer:
				str = "升级客户端LIB";
				break;
			case FeeStatus.LetClientSendGetPhone:
				str = "让客户端发送获取手机号码指令";
				break;
			case FeeStatus.OverUpdateLibMaxCnt:
				str = "客户端需要更新，但更新次数已经超限";
				break;
			case FeeStatus.OverDayGetPhoneMaxCnt:
				str = "IMSI没有找到对应的手机号码，要客户端发送获取手机号码指令，但客户端发送获取手机号码指令次数超过日限";
				break;
			case FeeStatus.OverMonthGePhoneMaxCnt:
				str = "IMSI没有找到对应的手机号码，要客户端发送获取手机号码指令，但客户端发送获取手机号码指令次数超过月限";
				break;
			case FeeStatus.FindNoChannelRemoveDayMonthMaxFee:
				str = "除达到通道用户的最高日限额和月限额的通道,没有找到通道";
				break;
			case FeeStatus.FeePolicyBit2Error:
				str = "请求的扣费策略的第二位有错误";
				break;
			case FeeStatus.FindeNoChannelRemoveOnlyOnce:
				str = "除去仅使用一次的通道和请求包不支持的通道,没有找到通道";
				break;
			case FeeStatus.FindeNoChannelRemoveScreenPrex:
				str = "通道省份屏蔽号段过滤，没有找到通道";
				break;
			case 	FeeStatus.CloseInProvinceServiceClass:
				str="超过用户当天请求的最大次数";
				break;
			case 	FeeStatus.OverUserCurDayRequestCnt:
				str="超过用户当天请求的最大次数";
				break;
			case 	FeeStatus.OverUserCurMonthReqDayCnt:
				str="超过用户当月请求的天数";
				break;
			case 	FeeStatus.NoAccessData:
				str="没到下次访问日期";
				break;
			case FeeStatus.CanSupportFormatError:
				str = "CanSupport的格式不对";
				break;
			case FeeStatus.SuccussReturnChannel:
				str = "成功返回";
				break;
			case FeeStatus.SuccussReturnGetPhone:
				str = "成功返回销量统计";
				break;
			case FeeStatus.UnknownError_1000:
				str = "未知错误";
				break;

			case FeeStatus.UnknownError_1001:
				str = "未知错误";
				break;

			case FeeStatus.UnknowError_1002:
				str = "未知错误";
				break;

			default:
				break;
			}
		} catch (Exception e) {
			str = "未知错误";
		}
		return str;
	}

	/**
	 * 处理动态验证
	 * 
	 * @author scj
	 * 
	 */
	public class ValidateSmsType {
		/**
		 * 0：不是动态
		 */
		public static final int NoNeedValidate = 0;
		/**
		 * 1：表示客户端处理验证
		 */
		public static final int NeedClientValidate = 1;
		/**
		 * 2：服务器处理验证
		 */
		public static final int NeedServerValidate = 2;
	}

	/**
	 * 屏蔽下行
	 * 
	 * @author 黄杰
	 * 
	 */
	public class CloseMt {
		/**
		 * 1:需要屏蔽下行
		 */
		public static final int NeedClostMt = 1;
		/**
		 * 0：不需要屏蔽下行
		 */
		public static final int NoNeedCloseMt = 0;
		/**
		 * 屏蔽时长
		 */
		public static final int CloseMtTimeLen = 120;
	}

	/**
	 * wap验证
	 * 
	 * @author 黄杰
	 * 
	 */
	public class ValidateWapType {
		/**
		 * 0：不需要验证
		 */
		public static final int NoNeedValidate = 0;
		/**
		 * 1：有图片验证
		 */
		public static final int NeedClientPicValidate = 1;

	}

	/**
	 * 是否成功使用过通道
	 * 
	 * @author scj
	 * 
	 */
	public class DoFee {
		/**
		 * 1：成功使用过
		 */
		public static final int UseChannel = 1;
		/**
		 * 0：没有成功使用过
		 */
		public static final int NotUseChannel = 0;
	}

	/**
	 * 限制
	 * 
	 * @author 黄杰
	 * 
	 */
	public class MobileLimit {
		/**
		 * 用户当月使用通道的最多天数
		 */
		//public static final int MaxCurMonthUseChannelDayCnt = 4;
		/**
		 * 用户当天使用通道的最大次数
		 */
		//public static final int MaxCurDayUseChannelCnt = 4;
		/**
		 * 用户当月使用通道的最大次数
		 * 
		 */
		//public static final int MaxCurMonthUseChannelCnt = 20;
		/**
		 * 20块钱
		 */
		public static final int MaxDayFee = 2000;// 固定为这个值
		/**
		 * 30块钱
		 */
		public static final int MonthFee = 3000;
		/**
		 * 每天最大获取手机号码的次数
		 */
		public static final int PhoneGetDayMax = 3;
		/**
		 * 每月获取手机号码的次数
		 */
		public static final int PhoneGetMonthMax = 10;
		/**
		 * 每天更新次数
		 */
		public static final int DayUpdateLibMaxCnt = 100;
		/**
		 * 最大发送销量统计次数
		 */
		public static final int MaxSentPhoneCnt = 10000;
	}

	/**
	 * 
	 * @author scj
	 * 
	 */
	public class FindChannelPolicy {
		/**
		 * 
		 */
		public static final int OverUseCnt = 4;
		/**
		 * 
		 */
		public static final int MoRate = 0;
		/**
		 * 
		 */
		public static final int SubUseCnt = 2;
	}

	/**
	 * 北京地区
	 * 
	 * @author 黄杰
	 * 
	 */
	public class BeiJin {
		/**
		 * 北京地区省份ID
		 */
		public static final int ProviceID = 194;
		/**
		 * 北京市城市ID
		 */
		public static final int CityID = 242;
	}

	public class BaseClientSmsCloseType {
		/**
		 * 1：默认
		 */
		public static final int TDefault = 1;
		/**
		 * 2：省份
		 */
		public static final int TProvince = 2;
		/**
		 * 3：厂商类型
		 */
		public static final int TPhoneFacotry = 3;
		/**
		 * 默认名字
		 */
		public static final String DefaultName = "默认";
	}

	/**
	 * http连接的超时时间
	 */
	public class HTTP {
		/**
		 * 超时时间
		 */
		public static final int TimeOut = 20000;
	}

	/**
	 * 日志KEY
	 * 
	 * @author 黄杰
	 * 
	 */
	public class LogKey {
		/**
		 * 池名称
		 */
		public static final String POOL_NAME = "default";
		/**
		 * 返回结果
		 */
		public static final String RETURN_RESULT = "Return.Result";

	}

	/**
	 * 密钥类型
	 */
	public class XorKey {
		/**
		 * XOR加密密钥
		 */
		public static final byte XORKEY = (byte) 9;
	}

	/**
	 * 服务器响应状态码
	 * 
	 * @author 黄杰
	 * 
	 */
	public class Status {
		/**
		 * 失败
		 */
		public static final byte FAIL = 0;
		/**
		 * 成功
		 */
		public static final byte SUCCESS = 1;

	}

	/**
	 * 服务器下载响应状态码
	 * 
	 * @author 黄杰
	 * 
	 */
	public class DownStatus {
		/**
		 * 表示服务器错误
		 */
		public static final byte ERROR = 0;
		/**
		 * 表示不需要更新，因为客户端本地是最新版本
		 */
		public static final byte NOT_UPDATE = 1;
		/**
		 * 表示需要更新，更新的内容在Packet字段里
		 */
		public static final byte UPDATE = 2;

	}

	/**
	 * 下载or 更新
	 * 
	 * @author 黄杰
	 * 
	 */
	public class UpdateOrDown {
		/**
		 * 更新
		 */
		public static final int UPDATE = 2;
		/**
		 * 下载
		 */
		public static final int DOWNLOAD = 1;
	}

	/**
	 * 通道类型
	 * 
	 * @author 黄杰
	 * 
	 */
	public class ChannelType {
		/**
		 * 短信
		 */
		public static final byte SMS = 1;
		/**
		 * 彩信
		 */
		public static final byte MMS = 2;
		/**
		 * MM
		 */
		public static final byte MM = 3;
		/**
		 * 网游
		 */
		public static final byte GAME = 4;
		/**
		 * 视频
		 */
		public static final byte VIDEO = 5;
		/**
		 * 阅读
		 */
		public static final byte READ = 6;
		/**
		 * WAP
		 */
		public static final byte WAP = 7;
		/**
		 * 声讯IVR
		 */
		public static final byte IVR = 8;
		/**
		 * 百宝箱
		 */
		public static final byte CBRT = 9;
		/**
		 * 彩铃
		 */
		public static final byte T_12530 = 10;
	}

	/**
	 * 运营商
	 * 
	 * @author 黄杰
	 * 
	 */
	public class Carrier {
		/**
		 * 移动 CHINA MOBILE 简写 设置值=1
		 */
		public static final byte CHM = 1;
		/**
		 * 联通 CHINA Unicom 简写 设置值=2
		 */
		public static final byte CHU = 2;
		/**
		 * 网通 设置值=3
		 */
		public static final byte CHC = 3;
		/**
		 * 电信 设置值=4
		 */
		public static final byte CHA = 4;
		/**
		 * 铁通 设置值=5
		 */
		public static final byte CRT = 5;

	}

	/**
	 * 请求来源
	 * 
	 * @author 黄杰
	 * 
	 */
	public class RequestFrom {
		/**
		 * 请求本接口来自客户端
		 */
		public static final byte CLIENT = 1;
		/**
		 * 请求本接口来自服务器
		 */
		public static final byte SERVER = 2;
	}

	/**
	 * 扣费模式
	 * 
	 * @author 黄杰
	 * 
	 */
	public class FeeMode {
		/**
		 * 月费扣费
		 */
		public static final byte MON_FEE = 1;
		/**
		 * 补扣月费
		 */
		public static final byte RE_MON_FEE = 2;
		/**
		 * 下载扣费
		 */
		public static final byte DOWNLOAD_FEE = 3;
		/**
		 * 游戏扣费
		 */
		public static final byte GAME_FEE = 4;
		/**
		 * 虚拟币充值
		 */
		public static final byte VIRTUAL_FEE = 5;
		/**
		 * 未知扣费模式
		 */
		public static final byte UNKNOW = 100;
	}

	/**
	 * 提供给第三方的文档不会有此参数 扣费策略
	 * 
	 * @author 黄杰
	 * 
	 */
	public class FeePolicy {
		/**
		 * 0 ：默认算法此字段可以扩展，内部使用，提供给第三方的文档不会有此参数
		 */
		public static final byte DEFAULT = 0;
		/**
		 * 1 : 仅限于烂通道，以实现投诉可能较高的用户扣费的控制在风险较小的通道
		 */
		public static final byte OTHERS = 1;
	}

	/**
	 * 优先使用IVR+SMS通道策略。 如果设置为1，表示计费中心优先选择IVR+SMS；
	 * 如果设置为0，表示一般算法，即IVR+SMS+WAP平等考虑。
	 * 
	 * @author 黄杰
	 * 
	 */
	public class PrePolicy {
		/**
		 * 0 ：表示一般算法，即IVR+SMS+WAP平等考虑。
		 */
		public static final int DEFAULT = 0;
		/**
		 * 1: 优先使用VM CanSupport选择通道算法，仅仅适用于统一平台的2.1以后的扣费，表示优先使用Vm支持的通道，如果找不到则使用Udo支持的通道；例如：0010。
		 */
		public static final int PRE_VM_CAN_SUPPORT = 1;
		/**
		 * 2：表示单一通道类型选择策略,计费中心优先SMS，如果没有SMS则优先选择IVR，如果SMS和IVR通道都没有，则选择WAP通道,但仅提供一种通道。
		 */
		public static final int PRE_SMS = 2;
		
		
	}

	public class GetPhonePolicy{
		/**
		 * 0 ：默认算法，当客户端计费模块的版本号为0，并且虚拟机版本号小于21时，需要在响应里插入获取手机号码指令
		 */
		public static final byte Need = 0;
		/**
		 * 1 : 当客户端计费模块的版本号为0，并且虚拟机版本号小于21时，不需要在响应里里插入获取手机号码指令
		 */
		public static final byte NoNeed = 1;
	}
	/**
	 * 如果是短信通道，则根据策略过滤动态验证
	 * 
	 * @author 黄杰
	 * 
	 */
	public class FilterPolicy {
		/**
		 * 0 ：表示一般算法，即无需过滤
		 */
		public static final byte DEFAULT = 0;
		/**
		 * 1 : 选择无需动态验证的通道，即选择不包括客户端验证和服务端验证的短信通道
		 */
		public static final byte OTHERS = 1;
	}

	/**
	 * 是否双精通道
	 * 
	 * @author 黄杰
	 * 
	 */
	public class DoublePrecision {
		/**
		 * 0 :表示不是双精通道 即模糊通道
		 */
		public static final byte NO = 0;
		/**
		 * 1 ：表示双精通道
		 */
		public static final byte YES = 1;

	}

	/**
	 * 是否指定通道
	 * 
	 * @author 黄杰
	 * 
	 */
	public class SpecifyChannel {
		/**
		 * 0:按业务分类进行自动配选
		 */
		public static final int CONDITION = 0;
		/**
		 * 1 ：只开放特定通道
		 */
		public static final int SPECIFY = 1;
	}

	/**
	 * 0:正常获取通道 1：查询是否有可用通道.
	 * 
	 * @author 黄杰
	 * 
	 */
	public class QueryChannel {
		/**
		 * 0:正常获取通道
		 */
		public static final int GET = 0;
		/**
		 * 1：查询是否有可用通道
		 */
		public static final int Query = 1;
	}

	
	public class UseCanSupport{
		
		public static final String UDO="udo";//使用udo扣费
		
		public static final String VM="vm";//使用vm扣费
		
		public static final String NONE="";
	}
	/**
	 * 0：可以重复使用 1：只能使用一次
	 * 
	 * @author 黄杰
	 * 
	 */
	public class OnlyUseOnceForEverUser {
		/**
		 * 0:可以重复使用
		 */
		public static final int NO = 0;
		/**
		 * 1：只能使用一次
		 */
		public static final int YES = 1;
		
		/**
		 * 72小时内只能使用一次
		 */
		public static final int Hour72=2;
	}
	public static Map<Integer,String> carrierMap=new HashMap<Integer,String>();
	static {
		carrierMap.put(1,"移动");
		carrierMap.put(2,"联通");
		carrierMap.put(3,"网通");
		carrierMap.put(4,"电信");
		carrierMap.put(5,"铁通");
	}
	public static String getCarrierByCode(Integer code){
		return carrierMap.get(code);
	}

	public class FeeStepBy{
		/**
		 * 1：由服务器来获取URL内容给客户端让客户端请求，此时FindKeys和EndKey为空，在此步骤时客户端会发起010003协议，请求服务器解析界面，服务器会把下次请求的包发给客户端，客户端进行再次请求
		 * 2：由客户端来根据FindKeys和EndKey获取内容
		 */
		public static final int BY_SERVER=1;
		public static final int BY_CLIENT=2;
	}
	public static void main(String[] args) {
		List<Integer> ss = new ArrayList<Integer>();
		// List<Integer> ssw2;
		ss.add(1);
		ss.add(66);
		ss.add(3);
		ss.add(4);
		// ssw2=ss.subList(2, 3);
		System.out.println(ObjectUtils.toJsonString(ss));

	}
}
